После завершения этого раздела вы сможете создать области подкачки как дополнение к физической памяти и управлять ими.
Область подкачки — это область на диске, которой управляет подсистема управления памятью ядра Linux. Ядро использует области подкачки для дополнения оперативной памяти (ОЗУ) системы, размещая в них неактивные страницы памяти. ОЗУ и область подкачки вместе формируют виртуальную память.
Если объем используемой памяти системы превышает установленное ограничение, ядро ищет в ОЗУ неактивные страницы, назначенные процессам. Ядро записывает неактивные страницы в область подкачки и назначает освободившиеся страницы ОЗУ другим процессам. Если программе требуется доступ к странице на диске, ядро находит другую неактивную страницу памяти, записывает ее на диск, а затем загружает требуемую страницу из области подкачки.
Поскольку области подкачки находятся на диске, подкачка работает медленнее по сравнению с ОЗУ. Хотя область подкачки используется для дополнения ОЗУ системы, не следует считать данный механизм самодостаточным решением, если ОЗУ в вашей системе не хватает для рабочих нагрузок.
Определение размера области подкачки
Администратор должен задавать размер области подкачки в соответствии с нагрузкой на память в системе. Поставщики приложений иногда предоставляют соответствующие рекомендации. В следующей таблице приведены некоторые рекомендации, основанные на общем объеме физической памяти.
Таблица 6.1. Рекомендации по ОЗУ и области подкачки
Функция гибернации на ноутбуках и настольных компьютерах сохраняет содержимое ОЗУ в области подкачки перед выключением системы. При последующем включении системы ядро восстанавливает содержимое ОЗУ из области подкачки и не выполняет полную загрузку. Для таких систем размер области подкачки должен быть больше размера ОЗУ.
В статье базы знаний, указанной в справочных материалах в конце этого раздела, приведены дополнительные рекомендации по определению размера области подкачки.
Чтобы создать область подкачки, необходимо:
создать раздел с типом файловой системы linux-swap;
linux-swap
инициализировать раздел как область подкачки.
Создание раздела подкачки
С помощью команды parted создайте раздел нужного размера и задайте для него тип файловой системы linux-swap. В прошлом различные утилиты считывали тип файловой системы раздела, чтобы определить, следует ли активировать устройство, однако теперь это не так. Хотя утилитам больше не требуется знать тип файловой системы раздела, с его помощью администраторы могут быстро определить назначение раздела.
В следующем примере создается раздел размером 256 МБ.
[root@host ~]# parted /dev/vdb GNU Parted 3.2 Using /dev/vdb Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) print Model: Virtio Block Device (virtblk) Disk /dev/vdb: 5369MB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 1049kB 1001MB 1000MB data (parted) mkpart Partition name? []? swap1 File system type? [ext2]? linux-swap Start? 1001MB End? 1257MB (parted) print Model: Virtio Block Device (virtblk) Disk /dev/vdb: 5369MB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 1049kB 1001MB 1000MB data 2 1001MB 1257MB 256MB linux-swap(v1) swap1 (parted) quit Information: You may need to update /etc/fstab. [root@host ~]#
[root@host ~]#
parted /dev/vdb
vdb
(parted)
print
mkpart
swap1
1001MB
1257MB
256MB linux-swap(v1)
quit
После создания раздела выполните команду udevadm settle. Она ждет, пока система обнаружит новый раздел и создаст соответствующий файл устройства в каталоге /dev. Команда возвращает управление только после завершения всех операций.
/dev
[root@host ~]# udevadm settle [root@host ~]#
udevadm settle
Форматирование устройства
Команда mkswap создает на устройстве сигнатуру подкачки. В отличие от других утилит форматирования, mkswap записывает один блок данных в начале устройства, оставляя остальную часть неформатированной, чтобы ядро могло использовать ее для хранения страниц памяти.
[root@host ~]# mkswap /dev/vdb2 Setting up swapspace version 1, size = 244 MiB (255848448 bytes) no label, UUID=39e2667a-9458-42fe-9665-c5c854605881
mkswap /dev/vdb2
vdb2
Используйте команду swapon для активации отформатированной области подкачки.
Используйте команду swapon с именем устройства в качестве параметра либо команду swapon -a, чтобы активировать все области подкачки, указанные в файле /etc/fstab. Используйте команды swapon --show и free для просмотра сведений о доступных областях подкачки.
/etc/fstab
[root@host ~]# free total used free shared buff/cache available Mem: 1873036 134688 1536436 16748 201912 1576044 Swap: 0 0 0 [root@host ~]# swapon /dev/vdb2 [root@host ~]# free total used free shared buff/cache available Mem: 1873036 135044 1536040 16748 201952 1575680 Swap: 249852 0 249852
free
Swap: 0
swapon /dev/vdb2
Swap: 249852
Отключить область подкачки можно с помощью команды swapoff. Если в область подкачки записаны страницы, команда swapoff попытается переместить эти страницы в другие активные области подкачки или обратно в память. Если команда swapoff не сможет записать данные в другие места, она завершится ошибкой, а область подкачки останется активной.
Активация области подкачки на постоянной основе
Чтобы область подкачки активировалась каждый раз при загрузке системы, добавьте соответствующую запись в файл /etc/fstab. В примере ниже показана типичная строка в файле /etc/fstab для созданной выше области подкачки.
UUID=39e2667a-9458-42fe-9665-c5c854605881 swap swap defaults 0 0
В первом поле в этом примере указан UUID. Команда mkswap отображает этот UUID, когда вы форматируете устройство. Если вывода mkswap больше нет, используйте команду lsblk --fs. Кроме того, в первом поле можно использовать имя устройства.
Во втором поле обычно указывается точка монтирования. Однако для устройств подкачки, которые недоступны через структуру каталогов, это поле принимает заполнитель со значением swap. На man-странице fstab(5) используется заполнитель со значением none, однако использование значения swap позволяет получать более информативные сообщения об ошибках, если что-то пошло не так.
swap
fstab(5)
none
Третье поле — тип файловой системы. Тип файловой системы для области подкачки — swap.
Четвертое поле предназначено для опций. В этом примере используется опция defaults. Опция defaults включает опцию монтирования auto, которая автоматически активирует область подкачки при загрузке системы.
defaults
auto
Последние два поля — это бит dump и порядок выполнения fsck. Для областей подкачки не требуется резервное копирование или проверка файловой системы, поэтому в этих полях необходимо указать 0.
dump
fsck
После добавления или удаления записи в файле /etc/fstab необходимо выполнить команду systemctl daemon-reload или перезагрузить сервер, чтобы демон systemd зарегистрировал новую конфигурацию.
[root@host ~]# systemctl daemon-reload
systemctl daemon-reload
Указание приоритета области подкачки
По умолчанию система использует области подкачки последовательно. То есть ядро сначала использует первую активированную область подкачки, пока она не заполнится, после чего начинает использовать вторую область. Вы можете изменить порядок областей подкачки, назначив им приоритеты.
Чтобы указать приоритет, задайте опцию pri в файле /etc/fstab. Ядро сначала использует область подкачки с наивысшим приоритетом. Приоритет по умолчанию ― -2.
pri
В следующем примере показаны три области подкачки, заданные в файле /etc/fstab. Сначала ядро использует последнюю запись с приоритетом pri=10. После заполнения этой области используется вторая запись с приоритетом pri=4. Последней используется первая запись с приоритетом по умолчанию -2.
pri=10
pri=4
UUID=af30cbb0-3866-466a-825a-58889a49ef33 swap swap defaults 0 0 UUID=39e2667a-9458-42fe-9665-c5c854605881 swap swap pri=4 0 0 UUID=fbd7fa60-b781-44a8-961b-37ac3ef572bf swap swap pri=10 0 0
Используйте команду swapon --show для отображения приоритетов областей подкачки.
Если у нескольких областей подкачки одинаковый приоритет, ядро использует их поочередно.
Man-страницы mkswap(8), swapon(8), swapoff(8), mount(8) и parted(8)
База знаний. Какой размер области подкачки рекомендуется для платформ Red Hat?